package com.example.quart.service;

import com.example.quart.pojo.vo.QuartzJobVo;
import org.quartz.SchedulerException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import java.util.List;
import java.util.Map;

/**
 * @author LiYuhang
 * @version 0.1
 * @application
 * @Date 2020/11/1 16:19
 */

public interface QuartzService {
    /**
     * 增加一个job
     *
     * @param jobClass    任务实现类
     * @param quartzJobVo
     * @param jobTime     时间表达式 (这是每隔多少秒为一次任务)
     * @param jobTimes    运行的次数 （<0:表示不限次数）
     * @throws SchedulerException
     */
    void addJob(Class<? extends QuartzJobBean> jobClass,QuartzJobVo quartzJobVo,int jobTime,int jobTimes) throws SchedulerException;

    /**
     * 增加一个job
     *
     * @param jobClass    任务实现类
     * @param quartzJobVo
     * @throws SchedulerException
     */
    void addJob(Class<? extends QuartzJobBean> jobClass,QuartzJobVo quartzJobVo) throws SchedulerException;

    /**
     * 修改 一个job的 时间表达式
     *
     * @param quartzJobVo 任务组名
     * @throws SchedulerException
     */
    void updateJob(QuartzJobVo quartzJobVo) throws SchedulerException;

    /**
     * 删除任务一个job
     *
     * @param quartzJobVo
     * @throws SchedulerException
     */
    void deleteJob(QuartzJobVo quartzJobVo) throws SchedulerException;

    /**
     * 立刻在执行一个job
     *
     * @param quartzJobVo
     * @throws SchedulerException
     */
    void runAJobNow(QuartzJobVo quartzJobVo) throws SchedulerException;

    /**
     * 暂停一个job
     *
     * @param quartzJobVo 任务组名
     * @throws SchedulerException
     */
    void pauseJob(QuartzJobVo quartzJobVo) throws SchedulerException;

    /**
     * 恢复一个job
     *
     * @param quartzJobVo 任务组名
     * @throws SchedulerException
     */
    void resumeJob(QuartzJobVo quartzJobVo) throws SchedulerException;

    /**
     * 获取所有计划中的任务列表
     *
     * @return List<Map < String,Object>>
     * @throws SchedulerException
     */
    List<Map<String, Object>> findAllJob() throws SchedulerException;

    /**
     * 获取所有正在运行的job
     *
     * @return List<Map < String,Object>>
     * @throws SchedulerException
     */
    List<Map<String, Object>> findRunJob() throws SchedulerException;
}
